//#include <iostream>
//using namespace std;
//int main()
//{
//    int N = 0, x = 1;
//    cin >> N;
//    for (int i = 1; i <= N; i++) {
//        int K = 0;
//        cin >> K;
//        for (int j = 1; j <= K; j++) {
//            int test = 0;
//            cin >> test;
//            if (test >= i) {
//                x = 0;
//                cout << x;
//                goto t;
//            }
//        }
//    }
//t:
//    if (x) {
//        cout << x;
//    }
//    return 0;
//}

//#include <iostream>
//#include <algorithm>
//using namespace std;
//int s1[1000100] = { 0 };
//int s2[1000100] = { 0 };
//int w1[1000100] = { 0 };
//int w2[1000100] = { 0 };
//int main() {
//    int n, m, sum = 0;
//    int a1 = 0, a2 = 0, b1 = 0, b2 = 0;
//    cin >> n;
//    for (int i = 0; i < n; i++) {
//        int z;
//        cin >> z;
//        if (z < 0) {
//            s1[a1] = z;
//            a1++;
//        }
//        else {
//            s2[a2] = z;
//            a2++;
//        }
//    }
//    cin >> m;
//    for (int i = 0; i < m; i++) {
//        int z;
//        cin >> z;
//        if (z < 0) {
//            w1[b1] = z;
//            b1++;
//        }
//        else {
//            w2[b2] = z;
//            b2++;
//        }
//    }
//    sort(s1, s1 + a1);
//    sort(s2, s2 + a2, greater<int>());
//    sort(w1, w1 + b1);
//    sort(w2, w2 + b2, greater<int>());
//    for (int i = 0; i < a1 && i < b1; i++) {
//        sum += s1[i] * w1[i];
//    }
//    for (int j = 0; j < a2 && j < b2; j++) {
//        sum += s2[j] * w2[j];
//    }
//    cout << sum;
//    return 0;
//}

//#include <cstdio>
//#include <queue>
//#define MAX 100 + 10
//using namespace std;
//int inDegree[MAX];
//int MGraph[MAX][MAX];
//void initMGraph() {
//    for (int i = 0; i < MAX; i++) {
//        for (int j = 0; j < MAX; j++) {
//            MGraph[i][j] = 0;
//        }
//    }
//}
//bool TopSort(int n) {
//    queue<int> q;
//    for (int i = 1; i <= n; i++) {
//        if (inDegree[i] == 0) {
//            q.push(i);
//        }
//    }
//    int cnt = 0;
//    while (!q.empty()) {
//        int cur = q.front();
//        q.pop();
//        cnt++;
//        for (int i = 1; i <= n; i++) {
//            if (MGraph[cur][i] != 0) {
//                inDegree[i]--;
//                if (inDegree[i] == 0) {
//                    q.push(i);
//                }
//            }
//        }
//    }
//    if (cnt != n) return false;
//    return true;
//}
//int main() {
//    initMGraph();
//    int n;
//    scanf("%d", &n);
//    int k, c;
//    for (int i = 1; i <= n; i++) {
//        scanf("%d", &k);
//        for (int j = 0; j < k; j++) {
//            scanf("%d", &c);
//            inDegree[i]++;
//            MGraph[c][i] = 1;
//        }
//    }
//    bool flag = TopSort(n);
//    if (!flag)
//        printf("0");
//    else
//        printf("1");
//    return 0;
//}